/**
 * 超级管理员API接口
 * 创建时间：2025-09-17
 * 作者：开发团队
 * 目的：封装超级管理员模块的API调用
 */

import { httpRequest } from '../utils/request'
import type {
  Admin,
  AdminRequest,
  Campus,
  CampusRequest,
  DataPackage,
  DataPackageRequest
} from '../types/superadmin'
import type { ApiResponse, PaginationResponse } from '../types/common'

// 统计数据接口
export interface StatisticsData {
  summary: {
    total_verifications: number
    pass_count: number
    reject_count: number
    special_visitor_count: number
    pass_rate: number
  }
  daily_trend: Array<{
    date: string
    total: number
    pass: number
    reject: number
  }>
  campus_stats: Array<{
    campus_name: string
    total: number
    pass: number
    reject: number
  }>
  special_visitor_stats: {
    vip: number
    dispute: number
    other: number
  }
}

// 统计参数接口
export interface StatisticsParams {
  start_date: string
  end_date: string
  campus_id?: number
}

// 系统状态接口
export interface SystemStatusData {
  server: {
    cpu_usage: number
    memory_usage: number
    disk_usage: number
    uptime: number
    os: string
    platform: string
  }
  database: {
    status: string
    connections: number
    size: number
  }
  services: Array<{
    name: string
    status: string
    last_check: string
  }>
}

export const superAdminApi = {
  /**
   * 获取管理员列表
   * @param params 查询参数
   * @returns 管理员列表
   */
  getAdmins(params: { 
    page?: number, 
    size?: number, 
    campus_id?: number, 
    status?: string 
  }): Promise<PaginationResponse<Admin>> {
    return httpRequest.get<PaginationResponse<Admin>>('/superadmin/admins', { params })
  },

  /**
   * 创建管理员
   * @param data 管理员数据
   * @returns 创建结果
   */
  createAdmin(data: AdminRequest): Promise<ApiResponse<Admin>> {
    return httpRequest.post<ApiResponse<Admin>>('/superadmin/admins', data)
  },

  /**
   * 更新管理员
   * @param id 管理员ID
   * @param data 管理员数据
   * @returns 更新结果
   */
  updateAdmin(id: number, data: AdminRequest): Promise<ApiResponse<Admin>> {
    return httpRequest.put<ApiResponse<Admin>>(`/superadmin/admins/${id}`, data)
  },

  /**
   * 删除管理员
   * @param id 管理员ID
   * @returns 删除结果
   */
  deleteAdmin(id: number): Promise<ApiResponse<void>> {
    return httpRequest.delete<ApiResponse<void>>(`/superadmin/admins/${id}`)
  },

  /**
   * 获取管理员总数
   * @param params 查询参数
   * @returns 管理员总数
   */
  getAdminsCount(params: { campus_id?: number, status?: string }): Promise<ApiResponse<{ count: number }>> {
    return httpRequest.get<ApiResponse<{ count: number }>>('/superadmin/admins/count', { params })
  },

  /**
   * 获取院区列表
   * @param params 查询参数
   * @returns 院区列表
   */
  getCampuses(params: { page?: number, size?: number }): Promise<PaginationResponse<Campus>> {
    return httpRequest.get<PaginationResponse<Campus>>('/superadmin/campuses', { params })
  },

  /**
   * 创建院区
   * @param data 院区数据
   * @returns 创建结果
   */
  createCampus(data: CampusRequest): Promise<ApiResponse<Campus>> {
    return httpRequest.post<ApiResponse<Campus>>('/superadmin/campuses', data)
  },

  /**
   * 更新院区
   * @param id 院区ID
   * @param data 院区数据
   * @returns 更新结果
   */
  updateCampus(id: number, data: CampusRequest): Promise<ApiResponse<Campus>> {
    return httpRequest.put<ApiResponse<Campus>>(`/superadmin/campuses/${id}`, data)
  },

  /**
   * 删除院区
   * @param id 院区ID
   * @returns 删除结果
   */
  deleteCampus(id: number): Promise<ApiResponse<void>> {
    return httpRequest.delete<ApiResponse<void>>(`/superadmin/campuses/${id}`)
  },

  /**
   * 获取院区总数
   * @returns 院区总数
   */
  getCampusesCount(): Promise<ApiResponse<{ count: number }>> {
    return httpRequest.get<ApiResponse<{ count: number }>>('/superadmin/campuses/count')
  },

  /**
   * 获取统计数据
   * @param params 统计参数
   * @returns 统计数据
   */
  getStatistics(params: StatisticsParams): Promise<ApiResponse<StatisticsData>> {
    return httpRequest.get<ApiResponse<StatisticsData>>('/superadmin/statistics', { params })
  },

  /**
   * 生成数据包
   * @param data 数据包数据
   * @returns 生成结果
   */
  generateDataPackage(data: DataPackageRequest): Promise<ApiResponse<DataPackage>> {
    return httpRequest.post<ApiResponse<DataPackage>>('/superadmin/data-packages', data)
  },

  /**
   * 获取数据包列表
   * @param params 查询参数
   * @returns 数据包列表
   */
  getDataPackages(params: { page?: number, size?: number }): Promise<PaginationResponse<DataPackage>> {
    return httpRequest.get<PaginationResponse<DataPackage>>('/superadmin/data-packages', { params })
  },

  /**
   * 获取数据包详情
   * @param id 数据包ID
   * @returns 数据包详情
   */
  getDataPackage(id: number): Promise<ApiResponse<DataPackage>> {
    return httpRequest.get<ApiResponse<DataPackage>>(`/superadmin/data-packages/${id}`)
  },

  /**
   * 获取系统状态
   * @returns 系统状态
   */
  getSystemStatus(): Promise<SystemStatusData> {
    return httpRequest.get<SystemStatusData>('/superadmin/system/status')
  }
}